#include <bits/stdc++.h>
using namespace std;
static const int MOD = 1e9+7;
inline void add(int &a, int b) {
    a += b; if (a >= MOD) a -= MOD;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<vector<int>> a(n+1);
    for(int i = 1; i <= n; i++){
        a[i].resize(i+1);
        for(int j = 1; j <= i; j++){
            cin >> a[i][j];
        }
    }
    if(n == 1){
        cout << 1 << "\n";
        return 0;
    }

    // dp[x][y]: 当前已配对到第 t 步，A 在 (t,x)，B 在 (n-t+1,y) 的方案数
    vector<vector<int>> dp(2, vector<int>(n+2, 0));
    // 初始化 t=1：A 在 (1,1)，B 在 (n,y)
    for(int y = 1; y <= n; y++){
        if(a[1][1] == a[n][y]){
            dp[1][y] = 1;
        }
    }

    int maxT = (n + 1) / 2;
    for(int t = 1; t < maxT; t++){
        int ra = t+1, rb = n-t;
        int la = ra, lb = rb;
        vector<vector<int>> nxt(la+2, vector<int>(lb+2, 0));
        for(int x = 1; x <= t; x++){
            for(int y = 1; y <= n-t+1; y++){
                int w = dp[x][y];
                if(!w) continue;
                // A: (t,x)->(t+1, x or x+1)
                for(int dx = 0; dx <= 1; dx++){
                    int nx = x + dx;
                    if(nx<1||nx>la) continue;
                    // B: (n-t+1,y)->(n-t, y or y-1)
                    for(int dy = -1; dy <= 0; dy++){
                        int ny = y + dy;
                        if(ny<1||ny>lb) continue;
                        if(a[ra][nx] == a[rb][ny]){
                            add(nxt[nx][ny], w);
                        }
                    }
                }
            }
        }
        dp.swap(nxt);
    }

    int ans = 0;
    if(n & 1){
        // 奇数行：中点一定相同列
        for(int x = 1; x <= maxT; x++){
            add(ans, dp[x][x]);
        }
    } else {
        // 偶数行：t = n/2，(t,x) 与 (t+1,y) 必须相邻：y == x 或 x+1
        int t = n/2;
        for(int x = 1; x <= t; x++){
            // y = x
            add(ans, dp[x][x]);
            // y = x+1
            if(x+1 <= t+1) add(ans, dp[x][x+1]);
        }
    }
    cout << ans << "\n";
    return 0;
}
